package com.c2b.algorithm.leetcode.base;

/**
 * <a href='https://leetcode.cn/problems/maximum-odd-binary-number/'>最大二进制奇数(Maximum Odd Binary Number)</a>
 * <p>你必须按某种方式 重新排列 字符串中的位，使得到的二进制数字是可以由该组合生成的 最大二进制奇数 。</p>
 * <p>以字符串形式，表示并返回可以由给定组合生成的最大二进制奇数。</p>
 * <p>注意 返回的结果字符串 可以 含前导零。</p>
 *
 * <p>
 * <b>示例</b>
 * <pre>
 * 示例 1：
 *      输入：s = "010"
 *      输出："001"
 *      解释：因为字符串 s 中仅有一个 '1' ，其必须出现在最后一位上。所以答案是 "001" 。
 *
 * 示例 2：
 *      输入：s = "0101"
 *      输出："1001"
 *      解释：其中一个 '1' 必须出现在最后一位上。而由剩下的数字可以生产的最大数字是 "100" 。所以答案是 "1001" 。
 * </pre>
 * </p>
 *
 * <p>
 * <b>提示：</b>
 *  <ul>
 *      <li>1 <= s.length <= 100</li>
 *      <li>s 仅由 '0' 和 '1' 组成</li>
 *      <li>s 中至少包含一个 '1'</li>
 *  </ul>
 * </p>
 *
 * @author c2b
 * @since 2024/3/13 9:27
 */
public class LC2864MaximumOddBinaryNumber_S {

    static class Solution {
        public String maximumOddBinaryNumber(String s) {
            // 统计结果中 1 出现的次数 和 总位数
            int n = s.length();
            int oneTimes = 0;
            char[] chars = s.toCharArray();
            for (char c : chars) {
                oneTimes += c - '0';
            }
            for (int i = 0; i < n - 1; i++) {
                if (i < oneTimes - 1) {
                    chars[i] = '1';
                } else {
                    chars[i] = '0';
                }
            }
            chars[n - 1] = '1';
            return new String(chars);
        }
    }

    public static void main(String[] args) {
        Solution solution = new Solution();
        System.out.println(solution.maximumOddBinaryNumber("010"));
        System.out.println(solution.maximumOddBinaryNumber("0101"));
    }
}
